Omissions are a major risk in testing. Test planning and functional coverage analysis techniques are well known ways to reduce omissions and increase the quality of testing. Test planning tries to prevent omissions in advance (i.e., before tests are implemented and executed) by selecting what to test out of a possibly enormous test space, in a way that reduces as much as possible the risk of bugs escaping to the field. Functional coverage analysis points to gaps in coverage of existing tests or test plans.
Both Test planning and functional coverage analysis require modeling of the test space. The test space can represent inputs, scenarios, configurations, the application's internal state, or any other aspect that one is interested in testing. One form of model is as a Cartesian product model, also referred to as a functional model. A Cartesian product model comprises of a set of variables (also known as “functional attributes”), their respective values (also referred to as “domains”), and restrictions on the value combinations. Restrictions exclude a portion of the cross product between the different values of the variables. Restrictions may be provided in a variety of forms such as by explicitly enumerating excluded assignments to the variables, using Boolean expressions defining when value combinations are valid or invalid, or the like. Restrictions define, with respect to a space defined by a Cartesian cross product between domains of each variable, a sub-space which comprises the legal tasks. In some cases, different restriction definitions may be equivalent and may define the same sub-space as a test-space.